package qrcode

import (
	"autoDeploy/service/qrcode"
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

// GetQRCode 获取二维码
func GetQRCode(c *gin.Context) {
	// 从请求中获取用户 UID 和二维码类型 qrType
	uid := c.Query("uid")     // 获取查询参数 uid
	qrType := c.Query("type") // 获取查询参数 qrType

	// 调用 GenerateQRCode 函数生成二维码
	code, _, err := qrcode.GenerateQRCode(qrType)
	if err != nil {
		// 如果生成二维码失败，返回错误信息
		c.JSON(http.StatusInternalServerError, gin.H{"error": "生成二维码失败"})
		return
	}

	//将用户 uid 和 qrType 和 status 为0，存入redis中
	//先判断redis中是否已经存在了该数据
	status, err := qrcode.GetQrStatus(uid, qrType)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error,controller层获取{键：值}失败": err.Error()})
		return
	}
	//如果status为空则说明不存在
	if status == "" {
		// 哈希数据不存在,则创建新的键值对存入redis中
		_, err = qrcode.SetQRInfo(uid, qrType, "0")
		if err != nil {
			// 如果存储失败，返回错误信息
			c.JSON(http.StatusInternalServerError, gin.H{"error": "(uid,qrType,status)保存到redis失败"})
			return
		}
	} else {
		// 哈希数据存在，更新status为0即可
		err = qrcode.UpdateRedisQrStatus(uid, qrType, "0")
		if err != nil {
			c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
			return
		}
	}

	// 返回生成的二维码的Base64编码
	c.JSON(http.StatusOK, gin.H{"qrcode": code})
}

// ScanDocker 定义Docker扫描中间页
func ScanDocker(c *gin.Context) {
	//fmt.Println("docker 扫描成功")
	//返回模拟购买的页面
	c.HTML(http.StatusOK, "middle.html", nil)
}

// ScanK8S 定义Docker扫描中间页
func ScanK8S(c *gin.Context) {
	//fmt.Println("k8s 扫描成功")
	//返回模拟购买的页面
	c.HTML(http.StatusOK, "middle.html", nil)
}

//	SubmitPhone
//
// 描述信息：用户填写了手机号和购买服务类型，返回购买成功页面
//
// Param：
//
//	c ：gin的上下文实例
//
// Return：
func SubmitPhone(c *gin.Context) {
	// 从请求中获取用户 phone
	phone := c.Query("phone")
	qrType := c.Query("service")
	// 调用service层方法 根据用户phone和服务类型qrType 修改二维码状态
	fmt.Println("进入controller层提交手机号和服务类型为：", phone, qrType)
	err := qrcode.UpdateQrStatus(phone, qrType, "1")
	fmt.Println(err)

	if err != nil {
		return
	}

	//fmt.Println("准备渲染网页")
	//返回购买成功的页面
	qrcode.SuccessPage(c, qrType)
}
